package com.demo.common.util;

import com.mi.rule.db.dao.MiDao;
import com.mi.rule.util.ContextKit;
import com.mi.rule.util.RequestKit;
import com.mi.rule.util.project.MiException;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.context.support.DefaultMessageSourceResolvable;
import org.springframework.validation.BindingResult;

import java.util.Set;
import java.util.stream.Collectors;

/**
 * 等顶层服务实现类
 * 提供一些工具方法，用着方便
 */
public interface BaseService {

    /*** 当前访问者的用户ID ***/
    default String currentUserId() {
        return JwtKit.getParam(currentToken()).getString("userId");
    }

    /*** 当前访问者的角色ID ***/
    default String currentRoleId() {
        return JwtKit.getParam(currentToken()).getString("roleId");
    }

    /*** 当前访问者的Token ***/
    default String currentToken() {
        return RequestKit.request().getHeader("token");
    }

    /*** 空返回true ***/
    default boolean isBlank(Object o) {
        return ObjectUtils.isEmpty(o);
    }

    /*** 非空返回true ***/
    default boolean notBlank(Object o) {
        return !isBlank(o);
    }

    /*** 获取dao ***/
    default MiDao getDao() {
        return ContextKit.getBean(MiDao.class);
    }

    /*** 检查参数 ***/
    default void checkParam(BindingResult bindingResult) {
        if (bindingResult.hasErrors()) {
            Set<String> collect = bindingResult.getAllErrors().stream().map(DefaultMessageSourceResolvable::getDefaultMessage).collect(Collectors.toSet());
            throw new MiException(String.join(",", collect));
        }
    }

}
